/*
 * ! Ext JS Library 3.0.0 Copyright(c) 2006-2009 Ext JS, LLC licensing@extjs.com
 * http://www.extjs.com/license
 */
/**
 * @class Ext.ux.TabCloseMenu
 * @extends Object Plugin (ptype = 'tabclosemenu') for adding a close context
 *          menu to tabs.
 * 
 * @ptype tabclosemenu
 */
Ext.ux.TabCloseMenu = function() {
	var tabs, menu, ctxItem;
	this.init = function(tp) {
		tabs = tp;
		tabs.on('contextmenu', onContextMenu);
	};

	function onContextMenu(ts, item, e) {
		if (!menu) { // create context menu on first right click
			menu = new Ext.menu.Menu({
						items : [{
									id : tabs.id + '-close',
									text : 'Close Tab',
									handler : function() {
										tabs.remove(ctxItem);
									}
								}, {
									id : tabs.id + '-close-others',
									text : 'Close Other Tabs',
									handler : function() {
										tabs.items.each(function(item) {
													if (item.closable
															&& item != ctxItem) {
														tabs.remove(item);
													}
												});
									}
								}]
					});
		}
		ctxItem = item;
		var items = menu.items;
		items.get(tabs.id + '-close').setDisabled(!item.closable);
		var disableOthers = true;
		tabs.items.each(function() {
					if (this != item && this.closable) {
						disableOthers = false;
						return false;
					}
				});
		items.get(tabs.id + '-close-others').setDisabled(disableOthers);
		e.stopEvent();
		menu.showAt(e.getPoint());
	}
};

Ext.preg('tabclosemenu', Ext.ux.TabCloseMenu);
